#!/bin/sh /etc/rc.common

START=99
USE_PROCD=1
LOGGER="logger -t [Webd]"

start_service() {
	local basic_list="enable webd_conf webd_bin webd_port webd_root enable_recyclebin enable_anonymous anonymous_perm enable_ipv6"
	local users_list="enable_read enable_read_list enable_upload enable_move enable_showhide"
	for i in $(echo $basic_list);do
		local eval $i="$(uci_get_by_type webd 0 $i)"
	done;unset i
	if [ "$enable" == 1 ]
	then
		[ ! -r "$webd_root" -o ! -d "$webd_root" ] && EXIT "Unable to access $webd_root,exit ..."
		[ ! -x "$webd_bin" ] && EXIT "Unable to access $webd_bin,exit ..."
		if [ "$enable_recyclebin" == 1 -a ! -d "$webd_root/.Trash" ]
		then
			${LOGGER} "Creating Recycle Bin directory ..."
			mkdir -p $webd_root/.Trash || EXIT "Failed to create Recycle Bin directory,exit ..."
		fi
		${LOGGER} "Removing old config file ..."
		rm -f $webd_conf
		touch -a $webd_conf || EXIT "Failed to create config,exit ..."
		[ "$enable_ipv6" == 1 ] && webd_port="[::]:${webd_port}"
		if [ "$enable_anonymous" != 0 ]
		then
			if [ -n "$anonymous_perm" ]
			then
				
				unset enable_anonymous
				for i in $(echo $anonymous_perm);do
					enable_anonymous="$enable_anonymous$i"
				done
				unset i
			else
				enable_anonymous=0
				uci set webd.@webd[0].enable_anonymous=0
				uci commit webd
			fi
		fi
		echo "Webd.Listen $webd_port" >> $webd_conf
		echo "Webd.Root $webd_root" >> $webd_conf
		echo "Webd.Guest $enable_anonymous" >> $webd_conf
		
		for u in 0 1;do
			for i in $(echo $users_list);do
				eval ${i}=$(uci_get_by_type users $u $i 0)
				echo "$users_list" | grep -q $i
				[ "$?" == 0 ] && eval perm_bin=$(eval echo '$'perm_bin)$(uci_get_by_type users $u $i)
			done
			unset i
			username=$(uci_get_by_type users $u username)
			password=$(uci_get_by_type users $u password)
			if [ -n "$username" ]
			then
				eval perm=$(perm_converter $(eval echo '$'perm_bin) | tail -n 1)
				if [ -n "$(eval echo '$'perm)" ]
				then
					${LOGGER} "Creating account for User $username ..."
					echo "Webd.User $(eval echo '$'perm) $username $password" >> $webd_conf
				else
					${LOGGER} "Removing excessive user config ..."
					uci delete webd.@users[$u]
					uci commit webd
				fi
				unset perm_bin
			fi
		done
		unset u
		ps -efww | grep "$webd_bin" | awk '{print $1}' | xargs kill -9 2> /dev/null
		${LOGGER} "Starting Webd Service ..."
		procd_open_instance
		procd_set_param command $webd_bin -c $webd_conf
		procd_set_param respawn
		procd_close_instance
	else
		stop_service
		${LOGGER} "Webd Service is now disabled ..."
	fi
}

stop_service() {
	${LOGGER} "Stopping Webd Service ..."
}

service_triggers() {
	procd_add_reload_trigger "webd"
}

uci_get_by_type() {
	local ret=$(uci get webd.@$1[$2].$3 2>/dev/null)
	echo ${ret:=$4}
}

EXIT() {
	${LOGGER} $*
	exit
}

perm_converter() {
	local u i=1
	echo $1 | egrep -o [0-1] | while read X
	do
		if [ "$X" == 1 ]
		then
			case $i in
			1)u=r;;
			2)u=l;;
			3)u=u;;
			4)u=m;;
			5)u=S;;
			esac
			[ -n "$u" ] && a="$a$u"
			echo "$a"
		fi
		i=$(($i + 1))	
	done
}
